--------------------------------------------------------------------------------
| Metroid Password Generator 1.0a
| Copyright (C) 2005,2007-2008 emuWorks http://games.technoplaza.net/
| by John Ratliff [ webmaster AT technoplaza DOT net ]
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
| Table of Contents
--------------------------------------------------------------------------------

  - 1.0 Introduction
  - 2.0 Compilation and Installation
  - 3.0 Using the Program
    - 3.1 Encoding Basics
    - 3.2 Decoding Basics
    - 3.3 Raw Encoding
    - 3.4 The Shift Byte
    - 3.5 Checksum Fixing
    - 3.6 The Password Menu
      - 3.6.1 Perfect Game
      - 3.6.2 Debug Password
      - 3.6.3 Reset
      - 3.6.4 The Ending Submenu
      - 3.6.5 The Give Submenu
      - 3.6.6 The Checksum Submenu
    - 3.7 The Game Menu
    - 3.8 The Custom Password Text Control
  - 4.0 Known Bugs and Issues
  - 5.0 Release History
  - 6.0 Contacting the Author
  - 7.0 Thank Yous and Acknowledgments
  - 8.0 Legal Information
  
--------------------------------------------------------------------------------
| 1.0 - Introduction
--------------------------------------------------------------------------------

  Welcome to Metroid Password Generator. As you may have guessed, this program
  will help create passwords for Metroid, the first game in the Metroid series
  for the original NES (US and European versions only. The Japanese version used
  the FDS and saved progress on disk).
  
  But mpg does so much more than just generate passwords. It can also decode
  passwords, edit your game progress, fix checksums so you can spell words in
  your passwords, and much more.
  
  Why did I make this program when SnoBro and tapper have already created
  a Password Generator (MetCode - The Metroid Password Creator) and a Checksum
  Generator (metpass - Metroid Password Checksum Generator), respectively?
  
  First, neither of their programs work on anything but Windows, and I like
  programs that work on Windows, Linux, and Mac OS X, which mpg does.
  
  Second, neither of their programs have what I would consider a great GUI
  layout. SnoBro never released any refinements to his GUI, so you have to hunt
  all over a listbox to find which bits to change to get the password you
  want. It also never tells you if your password is invalid, such as when you
  select an invalid start location or activate the reset bit. It doesn't feature
  automatic decode either. Finally, even though you can edit the raw password
  data, you can't change the shift byte manually.
  
  metpass has a nicer interface; it looks like Metroid. This inspired me to put
  in the custom password panel which displays passwords in the Metroid font. I
  wish I could have got the graphics to work so you could edit it like he does
  too, but I could never make it work right, so I gave up. The Metroid font is
  hard to read sometimes though, especially those lowercase q's and g's, so I
  like having it in a more readable font, too.
  
  You can change the shift byte in his, but you don't know you're doing it. He
  also only lets you use 16 of the possible 255 shift values. I understand his
  reasoning, but I don't like limitations where they can be avoided. Finally,
  the most annonying thing is that you don't know what the password does unless
  you decode it with another password generator. He suggests using SnoBro's to
  find out what the password does. I thought the two should be combined. This is
  where mpg shines.
  
  Third, SnoBro's MetCode doesn't know what all the password bits do. He did a
  lot of research, and learned a few things I didn't (which I borrowed for mpg).
  I have figured out what 116 of the 128 bits mean, borrowing three bits from
  MetCode (the reset bit, mother brain's death, and Samus without her space
  suit).
  
  Finally, I do something that neither program does; organization of the GUI.
  Instead of one big checkbox list, we have the different controls compiling
  the things which you would expect to be together, but aren't in the raw
  password data. There are 11 categories (missile count, items, missile
  containers, energy tanks, red/yellow doors, start location, statues, armor,
  zebetites, and bosses) of controls. I was hoping to be able to be specific
  about which bit maps to what specific item, but it's difficult to specify
  which energy tank or missile container or red door you're talking about
  without a point of refernece, and there aren't any public maps I could find
  that list information like that. I try to be as specific as possible while
  working under this limitation.
  
  Please, please don't think I'm putting down either SnoBro or tapper. They are
  both pioneers and heroes to me, without whom I could never have done the work
  I did. I stand on the shoulders of giants. The fact that mpg surpasses their
  work (IMO) is a testament to their efforts.
  
--------------------------------------------------------------------------------
| 2.0 Compilation and Installation
--------------------------------------------------------------------------------

  Binaries are available for Windows (2000 and later), Linux (requires GTK+ >=
  2.0), and Mac OS X (Tiger or later). The source is also available if you want
  to compile it yourself.
  
  To compile, you will need a modern C++ compiler and wxWidgets 2.8 or later.
  
  On most platforms, compiling is as easy as opening a terminal and running
  ./configure && make. That should work on Linux, Mac OS X, and Windows with
  mingw/msys. There are also Visual Studio project files in the vstudio
  directory.
  
  For more complete compilation instructions, consult our compiling HOWTO at
  http://games.technoplaza.net/compile.php.
  
--------------------------------------------------------------------------------
| 3.0 Using The Program
--------------------------------------------------------------------------------

  To start the program, simply double click the mpg (or mpg.exe on Windows)
  executable. You can also start it from a terminal if you like.
  
--------------------------------------------------------------------------------
| 3.1 Encoding Basics
--------------------------------------------------------------------------------

  When you start the program, it will bring up a window full of check boxes and
  text controls and other miscellaneous widgets.
  
  To change the password, simply click on the various checkboxes or change the
  text controls in the notebook (the tabbed window).
  
  The first tab, labelled 'Items', contains controls for editing the basic
  equipment in Metroid. Your items (maru mari, bombs, etc), energy tanks,
  missile containers and missile count.
  
  The missile count is special because it is a spin control. This means you can
  use the up/down buttons beside it or enter the number directly into the text
  area. It is difficult to validate text input that is supposed to be in a
  certain numeric range. This means it is possible to enter invalid values.
  Do not be alarmed though, because invalid input will never be used. If you
  enter a number outside the range 0 - 255, 255 will be used instead.
  
  Keep in mind that if you have missiles but no missile containers, the game
  will not show your missile display. Also, you can only have as many missiles
  as you have missile containers (and 75 for each boss Kraid and Ridley you have
  killed). This means if you have 255 missiles, but have 1 missile container and
  no bosses killed, then the next time you collect a missile, your inventory
  will drop to 5 missiles.
  
  The second tab, labelled 'Misc', contains all the other things in Metroid.
  This includes the game time, which red and yellow doors are open, your start
  location, which boss statues have been raised, if Samus is wearing her space
  suit or not, which zebetites have been destroyed, and which bosses are dead.
  
  For some reason, when you raise the Kraid statue, the game deactivates the
  Kraid killed bit. I have found no downside to having them both enabled, and
  I'm not entirely sure it's not a bug in the game. Just keep in mind that you
  can have the statues raised or the bosses killed or both, and it all works the
  same way (except of course for the Tourian Bridge).
  
  The game time is special for much the same reason the missile count was
  special. Instead of being an 8-bit value here, though, it is a limited range
  32-bit value. The upper 24-bits have the full range, but the lowest 8 bits
  overflow at 208 (0xD0 hex). This means there are 3,489,660,720 distinct
  values in the range 0 - (4,294,967,296 - 1). Because the least significant
  byte with overflow at any value >= 208, we treat the value as if it were truly
  32-bit, though the game doesn't distinguish values where the lowest byte is
  in the range 208 - 255. 208 + 1 = 0 for the lowest byte.
  
  The game time is special for another reason. It is specified in what I will
  call 'game ticks'. A tick is equal to 256 frames, where 1 frame occurs each
  time an NMI (non-maskable interrupt) occurs, which occurs after the final
  scanline is written. If that made sense to you, good; if not, then forget it
  and read the next paragraph instead.
  
  Since television signals differ from Europe to the US, there are two
  conversions for turning game ticks into seconds. The NTSC (US) Nintendo ran at
  60 Hz, or 60 frames per second, because the US television signal runs at that
  speed. This means for Metroid run on a NTSC (US) Nintendo, 1 game tick =
  (256 frames / 60 frames per second) = approx 4.2666666666666666666666666666667
  seconds. For Metroid run on a PAL (European) Nintendo, 1 game tick =
  (256 frames / 50 frames per second) = 5.12 seconds.
  
  NTSC Metroid: 1 game tick = ~4 seconds
  PAL Metroid: 1 game tick = ~5 seconds
  
  The approximate time will be shown next to the game tick control, and you
  can switch the conversion from NTSC to PAL using the Game menu.
  
  The third panel, labelled 'Raw' will be covered in 3.3 Raw Encoding.
  
--------------------------------------------------------------------------------
| 3.2 Decoding Basics
--------------------------------------------------------------------------------

  To decode a password, simply enter it in the text control at the bottom
  under the Metroid password. Once you have entered the password, it is checked,
  and if authentic is automatically decoded. You will know this happens because
  the Metroid password display will only change when a valid password is
  entered.
  
  If you want to try it out, just enter JUSTIN BAILEY ------ ------ and see
  what happens. Then you can edit this password as described in 3.1 Encoding
  Basics or 3.3 Raw Encoding.
  
  Keep in mind that some passwords have selections that are not actually valid
  in the game itself. This means when you decode a password, it may not look
  correct in the first tab. This is because the first two tabs try as much
  as possible to ensure valid data. So you cannot have the Maru Mari if it has
  not been taken from the pedestal. The JUSTIN BAILEY password, which has all
  items (save for the Ice Beam) in the inventory is one such password. It also
  has a missile inventory greater than Samus' carrying capacity.
  
  If you enter a password with an invalid checksum, the fix checksum button will
  become enabled. This is useful when you want to make passwords from random
  words. This will be discussed more in 3.5 Checksum Fixing.
  
--------------------------------------------------------------------------------
| 3.3 Raw Encoding
--------------------------------------------------------------------------------

  The third tab, labelled 'Raw', is for raw password data editing. Instead of
  editing only the known values to produce a password, you can change it bit
  by bit, just like in SnoBro's MetCode.
  
  I find this approach useful only when decoding user-made passwords that
  aren't stricly valid in Metroid (having items without removing them for
  instance).
  
  You can also change the shift byte here. It's purpose will be discussed in
  3.4 The Shift Byte.
  
--------------------------------------------------------------------------------
| 3.4 The Shift Byte
--------------------------------------------------------------------------------

  The shift byte is a value in the Metroid password used to encode the data. It
  is used to encrypt the password.
  
  I won't talk about how it works here, because it's complex and ultimately
  irrelevant to password generation. Just know here that changing the shift
  byte will alter the password significantly. If you want to know how it works,
  or about how the password works in general, consult my Metroid Password Guide
  document (in the docs directory in password.txt).
  
  The shift byte means there are trillions upon trillions of passwords that do
  the same thing. Since there are 128 bits in the password and 256 shift values,
  this gives the possibility of 8.7112285931760246646623899502533e+40 passwords.
  
  The JUSTIN BAILEY password uses a shift value of 255. By default, the program
  uses a shift value of 0, which means the passwords aren't encoded at all. The
  NAR PASSWORD has a defacto shift value of 0, even though it isn't used. This
  means it is conceivable through raw editing that you could stumble upon the
  NAR PASSWORD and ruin your editing. If this happens, simply change the shift
  byte to get an encoded password.
  
--------------------------------------------------------------------------------
| 3.5 Checksum Fixing
--------------------------------------------------------------------------------

  Now we get to the fun part, checksum fixing. This enables you to create word
  passwords that actually work in Metroid.
  
  I don't know if anyone will want this, but it's fun sometimes. I spent a good
  twenty minutes playing with it, err, I mean testing my code.
  
  To make it work, simply enter a password. Because the checksum is encoded in
  the last two characters, you cannot use these as part of your message, but the
  rest are fair game. If it's not a valid password (and odds are it won't be),
  the fix checksum button will become enabled and you can click it to fix the
  checksum. At this point, the checksum will be changed and your password will
  be entered.
  
  Note that because you are supplying random data, your password may not be
  valid. The program will warn you if it knows your password is invalid. The two
  possibilities for invalid password are the reset bit (look in the raw password
  data) and an invalid start location.
  
  For instance, I wanted to use "ThisIs MyRock inPass word00". But this has both
  the reset bit set and an invalid start location. So I changed it to
  "ThisIs Myr0ck inPass word00". Then hit fix checksum and it becomes the valid
  password "ThisIs Myr0ck inPass word16".
  
  A note about spaces. It's best not to use spaces, because they can alter the
  letter that comes before it. If you want spaces, blanks can be used instead.
  Blanks are where there is no character between two characters. Metroid treats
  blanks as zeroes, but spaces are different. You cannot put a blank in the
  program, but you can put a 0, and change it to a blank when you enter it in
  the game. Metroid cannot enter blanks, but you can go backwards until you hit
  the character after the one you are at to get a blank. After a space is put
  into a password in Metroid, it cannot be a blank again until you reset.
  
  Finally, about the decoded meanings. If you have used metpass, you may have
  noticed it seems to be able to generate different values for the generated
  passwords. This is because it limits itself to the 16 possible shift values
  that can be used with the first 22 password characters. The shift byte is
  encoded in the 22 and 23 character of the password. The high four bits of the
  23rd character are the bottom half of the shift byte. Since there are four
  bits, this gives 16 possible values.
  
  Why does this let it give different passwords? It doesn't by itself. The
  reason it can generate 16 different sets of data is that instead of encoding
  a new shift byte onto an existing password which is what happens when you
  change the shift byte in mpg, it decodes the password you gave it using each
  of the 16 possible shift values, and that becomes your password data. Because
  metpass changes the shift byte and decodes a new password every time you hit
  NEXT, you get different data depending upon the shift byte.
  
  To constrast, our program allows you to handle the shift byte yourself. This
  means you can use all 256 possible shift values, if you know the right letters
  to use. To use the 16 possible shift values for any 22 character password,
  make the 23rd character one of the following: 0, 4, 8, C, G, K, O, S, W, a, e,
  i, m, q, u, or y. These values can be used automatically from password menu's
  checksum submenu.
  
  Now, getting back to my original password: "ThisIs MyRock inPass word00". If I
  change that first 0 to a G, I get a valid password without any editing. With
  the fixed checksum, it becomes "ThisIs MyRock inPass wordHT".
  
  The 22 character's low four bits are the high four bits of the shift byte.
  If you can't find a valid password with any of the 16 values, then you will
  have to change the 22 character. Once you change this character, you will have
  a new set of 16 shift values to try.
  
--------------------------------------------------------------------------------
| 3.6 The Password Menu
--------------------------------------------------------------------------------

  Editing the bits by hand is a lot to take care of it you just want certain
  things. The Password Menu has many useful options to make password editing
  easier.
  
--------------------------------------------------------------------------------
| 3.6.1 Perfect Game
--------------------------------------------------------------------------------

  The first item on the Password menu is the Perfect Game, or at least my idea
  of one. You get all the items (except the wave beam because you can't use them
  both legitimately), all the missile containers with a full missile count, all
  the energy tanks (even though you can only use 6), all the red and yellow
  doors open, kraid and ridley dead with their statues raised, all the zebetites
  dead, starting in Tourian with a game time of 0 and Samus in her swimsuit.
  This password is "------ ---mE3 l-y000 00y00j".
  
  Basically, it's what would happen if you went through the entire game twice
  (once with the space suit getting a good enough ending to play again without
  it, and once with the swimsuit), but with a forged game time of 0 and a full
  missile count (assuming you didn't have one when you got to Tourian). I guess
  you would also have to die the second time around to account for the 30
  energy and the fact that all the red and yellow doors in Tourian are open and
  the zebetites are dead.
  
  In other words, this is the password to just go kill Mother Brain with a
  minimum of complications (save for the fact you only start with 30 energy).
  
  If you want to be a little more fair, you might revive the zebetites and close
  the red and yellow doors in Tourian. Then it would be as if you just arrived
  in Tourian, but died once to account for the 30 energy. This password would be
  "------ --0m23 l-y000 00y00k".
  
  A better and fairer password if you want full energy would be to take away
  Brinstar Energy Tank Three, close the red door to the Tourian Bridge in
  Brinstar, close all red and yellow doors in Tourian, change the start location
  to Brinstar, lower the statues, and finally revive the zebetites. This way,
  you can collect the Energy Tank on the way to Tourian (it's the one in the
  ceiling just past the shaft to Kraid's Lair). It will be as if you were just
  going to Tourian for the first time. This password would be
  "z?---- --0m20 l-y000 00K01p".
  
--------------------------------------------------------------------------------
| 3.6.2 Debug Password
--------------------------------------------------------------------------------

  The second item on the Password menu is Debug Password. The debug password,
  aka the NAR PASSWORD, is NARPAS SWORD0 0000. The last 8 characters can be
  anything because the password is hard coded into the game, and the game only
  checks the first 16 characters. I think this has something to do with the fact
  that 16 password characters = 12 bytes which is 3 quads, a multiple of 4
  bytes. I don't have any research to back it up, but it's a nice data size to
  work with, and if it were simply a matter of bytes, they could have stopped at
  12, which would be 9 bytes. Due to blanks and zeros being treated the same
  way, you can also enter simply NARPAS SWORD and it will work.
  
  What does 'hard coded' mean? It means the checksum isn't checked, nor the
  shift byte used. It also means you cannot edit the password traits because
  it's not a real password.
  
  There are several theories behind the name. NAR could mean 'Not a Password',
  or it could mean 'North American Release' since the Japanese version used the
  FDS (Famicom Disk System) to store its data, or it could be a shortened form
  of the name Tohru Narihiro, the man who created the password system for
  the US and European version of Metroid. Whatever it means, the password is
  what it is.
  
  What does the debug password do? It turns on many interesting debugging
  effects that can be used to test the game with. Samus is invincible (she
  cannot be hurt or killed, except if the timer runs out when escaping from
  Zebes after killing Mother Brain). Samus has all the equipment (The Wave Beam
  and Ice Beam simultaneously, for a weird looking beam), and unlimited missile
  capacity, even when the missile display is not present. She has no missile
  containers or energy tanks, and neither Ridley nor Kraid is dead. Because the
  password is hard coded, you cannot save the effects. Some people think you can
  because when you start the game, you go back to your last position. But do not
  confuse this with actually entering the password the game gives you. If you
  reset the NES and try the new password, you will see that you have lost your
  debug effects.
  
  The Debug Password menu item simply brings up a dialog with the NAR PASSWORD
  and tells you it is hard coded and cannot be edited.
  
  It is possible to stumble upon the NAR PASSWORD by editing individual bits
  when using a shift value of 0. If this happens, or you try to enter the NAR
  PASSWORD into the text box, the program will warn you. If you stumble upon it
  by accident, simply change your shift value in the raw tab and you will be
  able to keep editing.
  
--------------------------------------------------------------------------------
| 3.6.3 Reset
--------------------------------------------------------------------------------

  This third item on the password menu is the reset option. You can use this to
  reset the password to a blank one (all zero's), which would be the equivalent
  of choosing Start instead of Continue from the Metroid intro.
  
  If you choose this option, it will ask you to confirm before it erases your
  old data.

--------------------------------------------------------------------------------
| 3.6.4 The Ending Submenu
--------------------------------------------------------------------------------

  There are 10 possible endings in the game. The data I have seen says there
  are five, but they are wrong. I don't know where this information came from
  originally, but it doesn't square with my copy of Metroid.
  
  The ending you get is based on two factors. a) The time it took you to finish
  the game, and b) whether Samus is wearing a space suit or a swimsuit.
  
  I'll do b first because it's simpler. The only change with b is that if she's
  wearing her swimsuit, you will see her in it when the ending screen starts
  after taking the elevator off Zebes. Otherwise, she starts out in her space
  suit.
  
  Now, there are 5 endings that depend on a. So, you get one of two things for
  b, and 5 for a, giving us a total of 10 endings.
  
  There may be more than 10 endings. I have done research to find out the
  exact times, but this is still based on what I have read in tutorials; that
  endings are based on the two factors (time and swimsuit).
  
  So, there are five changes based on time.
  
  1) Samus changes into a bikini at the end (Space Suit Off)
  2) Samus changes into a swimsuit at the end (Space Suit Off)
  3) Samus removes her helmet (Space Suit On)
  4) Samus raises her fist in a 'victory pose' (Space Suit On)
  5) Samus turns around covering her eyes in a 'shame pose' (Space Suit On)
  
  If the Space Suit is off, then for the last three endings, she puts it back
  on.
  
  I have done tests to find out the precise numbers (in game ticks) that cause
  the 5 time endings.
  
  1) Game Time < 1024 ticks (approx 0 hr 59 min NTSC or 1 hr 11 min PAL)
  2) Game Time < 2560 ticks (approx 2 hr 28 min NTSC or 2 hr 57 min PAL)
  3) Game Time < 5632 ticks (approx 5 hr 25 min NTSC or 6 hr 30 min PAL)
  4) Game Time < 31232 ticks (approx 30 hr 5 min NTSC or 36 hr 5 min PAL)
  5) Game Time >= 31232 ticks
  
  Now, as for the Endings submenu. The purpose of this menu is to change the
  game time to yield one of the ending results based on time. It will change
  your time to 0, 1024, 2560, 5632, or 31232 depending upon the ending you
  select. I decided not to include swimsuit changes in the menu as I assume
  people would either want Samus in her swimsuit or not.
  
--------------------------------------------------------------------------------
| 3.6.5 The Give Submenu
--------------------------------------------------------------------------------

  The next piece of the Password menu is another submenu. The Give submenu is
  here to give you all of something in a certain category. The categories are
  items, missile containers, energy tanks, red & yellow doors, statues,
  zebetites, bosses, and missile count.
  
  Items: Gives All Items
  Missile Containers: All Missile Containers (105 possible missiles with these)
  Energy Tanks: All 8 Energy Tanks
  Red & Yellow Doors: All 19 Red & Yellow Doors Open
  Statues: Kraid & Ridley's Statue Raised
  Zebetites: All 5 Zebetites Dead
  Bosses: All 3 Bosses (Kraid, Ridley & Mother Brain) Dead
  
  Full Missile Count is special in that instead of giving you 255, it gives you
  whatever your carrying capacity is. If you have all missile containers and
  both bosses are dead, then you can have 255. Kraid and Ridley are worth 75 a
  piece. Each missile container is another 5, of which there are 21 containers.
  
--------------------------------------------------------------------------------
| 3.6.6 The Checksum Submenu
--------------------------------------------------------------------------------

  If you have read the section 3.5 Checksum Fixing, you know that the last two
  characters are generally all that you need to leave alone to get a working
  password. You also know that the second to last (or 23rd if counting forward)
  character can be adjusted to give 16 possible shift values. Rather than
  memorizing these, you can use the checksum submenu to adjust the password for
  you.
  
  Each item on the Checksum submenu will take a value from the list of 16,
  change the 23rd character to it, and then decode the password with the new
  shift byte.
  
  Why is this handy? Because many passwords you form from strings of words will
  be invalid. They could have the reset bit set, or an invalid start location.
  This menu makes it easy to switch to a new shift byte to see if you get a
  valid password with the new value.
  
  If none of the 16 are valid though, you'll have to change the 22nd character.
  
--------------------------------------------------------------------------------
| 3.7 The Game Menu
--------------------------------------------------------------------------------

  The Game menu is used to select between NTSC and PAL versions of Metroid, for
  the US and European Nintendos, respectively. The only thing it affects is the
  calculation of the approximate time next to the game ticks control.
  
  The selection defaults to NTSC since it is what I use. If you have a PAL
  version of Metroid, you can change it using the menu to see what real times
  correspond to what game ticks.
  
--------------------------------------------------------------------------------
| 3.8 The Custom Password Text Control
--------------------------------------------------------------------------------

  If you have used SnoBro's password generator MetCode, you have probably used
  his password text control. It is very nice because it keeps spaces between
  the segments of the password to make things more readable.
  
  Starting in version 0.92, mpg has this now, too. It's not the same as
  SnoBro's, but it has more or less equivalent functionality.
  
  When you enter password values now, the control will skip over the separating
  spaces. It also works with the left and right arrows, delete and backspace,
  and pasting.
  
  You can paste passwords (or parts of passwords) into the control by selecting
  the position you want to paste at and pressing Ctrl-V on Windows and Linux,
  and Command-V on Mac OS X.

--------------------------------------------------------------------------------
| 4.0 Known Bugs and Issues
--------------------------------------------------------------------------------

  There are no KNOWN bugs at this time. :-)
  
  There are a few issues to be aware of.
  
  In Mac OS X, the text boxes seem to be scrolled past the end of the text. This
  can make them look like they aren't responding to input or even that they have
  any. Just click on the text control and press HOME or drag the mouse or use
  the left arrow till you reach the beginning. The text is there. The affected
  controls are the missile count, game time, shift byte, and password text.
  
  In Linux (GTK+), the debug password warning will show up twice if you enter
  a debug password that also passes checksum verification. I don't know if there
  is a solution to this as the problem is a side-effect of how text controls
  work under GTK+.
  
  In Linux using wxGTK, the display takes up more space than on Windows or Mac.
  It will fit on an 800x600 display if you hide any top and bottom panels you
  may have. Otherwise, you'll need a higher resolution. I tried to make it fit
  both all platforms under 800x600, but GTK just takes up too much space.
  
--------------------------------------------------------------------------------
| 5.0 Release History
--------------------------------------------------------------------------------

  Version 1.0a - Tuesday, December 16, 2008
    - Updated code to compile under wxWidgets 2.8.
    - Updated Visual Studio project files for Visual Studio 2008.
    - Added upx compression to mac version.
    - Added icons for the mac version.
    - Updated compilation instructions.

  Version 1.0 - Tuesday, February 20, 2007
    - Added Visual C++ 2005 project files.

  Version 0.94 - Monday, October 3, 2005
    - Removed restriction on Wave Beam + Ice Beam.

  Version 0.93 - Sunday, October 2, 2005
    - Added Metroid Password Format Guide to docs.
    - Changed password text size to 11 point.
    - Fixed crashing bug in Linux GTK+ 2.0 if the shift byte was changed to 0.
    - Replaced spin controls with text control + spin button.
    - Updated the readme to correct many misc. things.
    - Stopped fix checksum button from flickering.
    - Fixed repeating debug password warning (mostly).

  Version 0.92 - Friday, September 30, 2005
    - Added custom password control.
    - Added checksum shift submenu to password menu.
    - Changed menu accelerators to accomodate new checksum shift submenu.

  Version 0.91 - Thursday, September 29, 2005
    - Fixed readme regarding invalid game tick conversions.
    - Added real time label next to game ticks.
    - Added game menu for NTSC/PAL time conversion.
  
  Version 0.90 - Wednesday, September 28, 2005
    - First public release.
  
--------------------------------------------------------------------------------
| 6.0 Contacting the Author
--------------------------------------------------------------------------------

  I can be contacted via email (webmaster [AT] technoplaza [DOT] net). Replace
  that as appropriate. I also have an online feedback form at
  http://www.technoplaza.net/feedback.php
  
--------------------------------------------------------------------------------
| 7.0 Thank Yous and Acknowledgments
--------------------------------------------------------------------------------

  There are so many people who contributed to this program, and it would be
  criminal not to list them.
  
  First, SnoBro (aka Kent Hansen). My shining light in the dark corridoors of
  Zebes. SnoBro was the person who deciphered the Metroid password checksum and
  created the first password generator. Without his work, this program simply
  would not exist.
  
  Second, tapper (aka Sebastian Pettersson). His checksum calculator inspired me
  to add many things to this program that otherwise would not be there. He also
  helped me confirm my thoughts on the NAR PASSWORD which was plaguing me for a
  time.
  
  Third, Vadim Zeitlin, Robert Roebling, Stefan Csomer, Julian Smart, Ryan
  Norton, and any member of the wxWidgets team I have overlooked. Their
  wxWidgets library has saved me time and again from an impossible choice
  between Windows-only and Java.
  
  Last but never least, and probably most important of all, my mentor Gregory
  Rawlins who taught me all about design and design patterns. I am a million
  times better programmer than I ever was before I met him. Without his
  teaching, I would never have been able to tackle a program of this scale. I'm
  sure he would be horrified to know I've turned to the dark side (C++) and
  abandoned the light (Java). Sorry Gregory. :-)
  
--------------------------------------------------------------------------------
| 8.0 Legal Information
--------------------------------------------------------------------------------

  This program is Copyright (C) 2005,2007-2008 emuWorks
  http://games.technoplaza.net/. It is licensed under the GNU General Public
  License, which is included with this program in the docs directory in the file
  license.txt.
  
  For more information, please consult GNU at http://www.gnu.org/, or the Free
  Software Foundation at http://www.fsf.org/.

